約 3,357,637 件
https://w.atwiki.jp/tsminecraft/pages/10.html
このページは http //www26.atwiki.jp/minecraft/pages/645.htmlからの引用です 現在のこのページの情報は、竹mod ver2.5.9.7(for Minecraft 1.4.6)時のものです。 MOD名 竹mod 製作者 ruby 配布場所 http //forum.minecraftuser.jp/viewtopic.php?f=13 t=172 前提MOD 【MinecraftForge】 使用Block ID 238-251 (14個) 使用Item ID 3791-3810 (19個) 使用Sprite ID 0個 使用Terrain ID 0個 使用class なし (前提MOD除く) 目次 このMODについて 追加ブロック・アイテム・レシピ一覧 筍・竹・桜について 袋の使い方 実際に設置してのサンプル画像 モブごとの刀の有効度&追加ドロップ一覧 温泉について このMODについて ruby氏作成の、Minecraft世界に竹・桜・畳・ふすま・行灯・和箪笥・布団・温泉といった和の要素を追加するMOD。 追加アイテムの半分は和風インテリア用のデコレーションアイテムだが、 残りの半分には麦飯や串焼き、爆竹に竹槍、透明Lv15光源ブロックこと狐火など、独特のアイテムが揃っている。 夜にほのかに光る桜の木や、湯気の立ち昇る温泉などは、ことさら日本人プレイヤーの心をくすぐる。 露天風呂や純日本家屋を作りたい、和の風景が欲しい人向け。 有志によって一部のテクスチャを32x32サイズに描きなおしたテクスチャパックが幾つか配布されている。 ダウンロード場所:http //forum.minecraftuser.jp/viewtopic.php?f=14 t=5598 (作者:Helve) ダウンロード場所:http //forum.minecraftuser.jp/viewtopic.php?f=13 t=172 start=540#p57500 (作者:z31) ダウンロード場所:http //forum.minecraftuser.jp/viewtopic.php?f=13 t=172 start=600#p60548 (作者:TUMO) 追加ブロック・アイテム・レシピ一覧 1ページ当たりの容量制限の関係で、別ページに分割 筍・竹・桜について ◆筍 MOD導入後に生成された森林・山岳バイオームのChunksにて、一定確率で草・土ブロック上に配置される。 採取方法が特殊で、クワを使って破壊しないと回収できずに消滅する。 回収した筍は、草・土ブロック上にのみ植えられる(というか、真下が草・土ブロックな座標にしか存在できない) 明るさLv7以上の日光以外の光を受けている場合に限り、時間経過により確率で竹に成長する。 骨粉を使うと即座に竹に変化するが、この場合も明るさLv7以上の日光以外の光が必要。 この他、高さ9ブロック以上に成長した竹の、根元の竹を中心とした3x3x3範囲内に一定確率で自然発生する。 (基本的に雨天時に発生しやすいが、雨が降っていない時でも超低確率で発生する) (この自然発生により耕地ブロック上に生成された場合、同時に真下の耕地ブロックを土ブロックに変える) ◆竹 自然配置はされない。明るさLv7以上の日光以外の光を受けた筍が、成長する形でのみ出現する。 サトウキビ同様に障害物判定はなく、すり抜けて移動できる。 サトウキビと違い、隣接マスに水場は必要ない。 筍と違い、成長に明るさは必要ない(明るさLv7以上の日光以外の光は、筍の段階でだけ必要とする) サトウキビと違い、最大で高さ10ブロックまで成長するが、成長スピードはかなり遅い。 素手で破壊できるが、節のどこか一箇所を破壊すると根元から先端まで全部がドロップアイテム化する。 (根元の1ブロックだけを収穫せずに残して、再び生えてくるのを待つ、という事はできない) サボテンやサトウキビと違い、収穫したものをブロックとして再設置できない。景観要員は竹ブロックが担当。 (筍から成長して伸びていったものだけが、マップ上にブロックとして存在できる形になる) 高さ9ブロック以上に成長した竹は、根元の竹を中心とした3x3x3範囲内に一定確率で筍を生やす。 (ただし真下のブロックが土・草・耕地のいずれかである場所にしか筍は出現できない) (耕地の場合、土・草に比べて筍の出現成功率が2倍) (基本的にこの増殖は雨天時に顕著だが、雨が降っていない時であっても超低確率で増える) 骨粉を使うと、即座に1ブロック分成長する(最大10ブロックまで) 高さ10ブロックに達した竹に更に骨粉を使うと、根元を中心とした3x3x3範囲内に高確率で筍が出現。 (真下のブロックが耕地である範囲にはより出現しやすくなる) ◆桜 MOD導入後に生成された森林・山岳バイオームのChunksにて、一定確率で草・土ブロック上に配置される。 葉ブロックはオリジナルのもので、明かりLv10の光源として機能、暗闇ではライトアップされる。 また通常の木と違い、散発的に桜の花びらが舞い散るエフェクトを伴う。 舞い散った桜の花びらが水面に落ちた場合、ごく短時間だが水面に浮く(ただし瞬く間に消滅する) 苗木は通常の木同様、葉ブロックが壊れた時に一定確率で出る。 アイコンは白樺の苗木と全く同じだが、アイテム名&内部データは別物の新規追加アイテム。 (v2.5.9.2以降)バニラの葉ブロックと違い、桜の葉ブロックは原木からの接続が断たれても時間経過で自然消滅しない。 桜の苗木を収集する場合は素手での地味な破壊か、扇子を使って吹き散らすのが推奨される。 (v2.5.9.2以降)原木は、見た目こそ松の原木と同じ見た目だが、BlockID上は別の原木扱い。 主にテクスチャパック作者に配慮した措置であり、バニラテクスチャ時は特に気にする必要がない。 原木を加工して得られる木材は、松の木材を流用しており、独自の木材ではない。 v2.5.6.6から、桜の苗木に骨粉以外の染料を使用すると、色付き桜に成長するようになった(全15色)。 違うのは葉ブロックの色だけで、原木は松、葉ブロックが壊れた際に一定確率で出る苗木も通常のものだが、 きちんと花びらは舞い落ちるし、明かりLv10の光源として暗闇ではライトアップされる。 + (画像で見る) 黒色(ブラック) 赤色(レッド) 緑色(グリーン) 茶色(ブラウン) 青色(ブルー) 紫色(パープル) 水色(シアン) 薄灰(ライトグレー) 灰色(グレー) 桃色(ピンク) 黄緑(ライム) 黄色(イエロー) 空色(ライトブルー) 赤紫(マゼンタ) 橙色(オレンジ) 袋の使い方 1.登録 収納したいブロックとクラフトする事で、そのブロックを袋に登録できる。 登録時に対象のブロックを1つ消費する。 2.収納 袋を手に持った状態でブロックが設置できない遠方を右クリックすると、 プレイヤーのインベントリ内にある登録ブロック全てが袋内に収納される(ただし最大16スタック1024個分まで) ⇒ 3.設置 袋を手に持った状態でブロックが設置できる(=ターゲッティングフレームが出る)近場を右クリックすると、 袋内に収納したブロックを1つ消費してその場所にブロックを設置する。 ⇒ また、スニークしながら(Shiftキーを押しながら)右クリックする事で、水上(溶岩上)にブロックを設置できる。 ただしこの機能が有効なのは液体源ブロックに対してだけで、液体流の上には設置できない。 ⇒ 4.排出 異種のブロックを登録し直すと、その前まで入っていた全ブロックがプレイヤーのインベントリ内に吐き出される。 ⇒ 実際に設置してのサンプル画像 ◆畳ブロック・茅葺きブロック 素手でも超高速撤去できる。 スニークしながら(Shiftキーを押しながら)設置済みの畳・茅葺きブロックを右クリックすると、半ブロック化。 また茅葺きの階段はバニラの階段同様、逆さまに設置する事ができる。 ◆竹柵 設置法則は窓ガラスと同じ。素手でも超高速撤去できる。 強度はさほどでもなく、水流・溶岩流が接触するとアイテム化してしまう。 ◆クッションブロック 撤去にはほんの少しだけ時間がかかる。対応ツールは特に無い。 (左) 一段では高さ16までの落下ダメージしか無効化できない。17以上から落ちるとそのままダメージを喰らう。 (右) 二段重ねると高さ17以上からの落下ダメージも無効化できる。高度250から落ちてもダメージなし。 強度はさほどでもなく、水流・溶岩流が接触するとアイテム化してしまう。 ◆ふすま・障子 どちらも1クリックで撤去可能。 鉄ブロックで示したエリアにプレイヤーが踏み込むと、自動で左右にスライドして開く。 懐き状態のモブ(狼、山猫)には反応するが、それ以外の動物、モンスター、Entityには反応しない。 下の画像のようにスライド先に障害物があったとしても問題なく動作する。 強度は非常に弱く、水流・溶岩流の他、矢による攻撃を受けてすらドロップアイテム化してしまう。 表と裏が同じ模様なふすまに対し、障子は表裏の模様が違い、スニークしながら設置で表裏反転設置ができる。 更に設置後にスニークしながら右クリックすると、自動ドア機能をOn/Offできる。 Offの状態でも右クリックすれば手動で開閉できる。 Offの状態で左クリックするとアイテム化させずに設置位置の微調整ができる。 (左クリック毎にプレイヤーの向いている方角へ0.1ブロック分押し込む) ◆行灯・布団 どちらも1クリックで撤去可能。 行灯は明るさLv13の光源(松明よりもLv1だけ暗い) MC1.2.5までは実体&当たり判定が無かったが、MC1.3.2からは見た目通りの実体&当たり判定を得た。 普通に照明具として使用する。 布団は右クリックで座れ、座ってから5秒待つと太陽&月の動きが早送り、通常の20倍の速さで時間が流れ出す。 ただしMobの動きだとか、作物の成長だとか、かまどの精錬速度とか、そういうものは加速されない。 あくまで加速するのは太陽&月の移動速度だけであり、手っ取り早く昼を夜に、夜を昼にするために使用する。 どちらも水流・溶岩流が接触するとアイテム化する。 ◆風鈴 1クリックで撤去可能。 別に天井に吊るす必要はなく、床・壁・天井、どこにでも自由に設置できる。 設置してあると、稀にチリンと微かな音を立てる他、時間経過によって短冊が揺れたり角度が変わったりする。 水流に押し流されない。 ◆掛け軸 1クリックで撤去可能。 絵画と同じように設置・撤去する。サイズは縦2x横1または縦3x横1のものしかない。 バリエーション豊富。サイズ3のものの絵柄は、主に花札の10点札・20点札のものが使われている。 水流・溶岩流が接触するとアイテム化する。 ◆狐火 狐火を手に持った状態なら1クリックで撤去可能。 明るさLv15の光源。アイテムとしての狐火を手に持った状態でのみ本体を視認できる。 狐火を手に持っていない状態では視認できず、完全に透明に。 v2.4.0から透明状態のは左クリックしても撤去できなくなった。狐火を持った状態でのみ撤去回収できる。 ただし透明状態であっても、水流・溶岩流が接触した場合は押し流されてアイテム化する。 モブごとの刀の有効度&追加ドロップ一覧 v2.5.8.5(MC1.4.2)から追加。 肉体を持つモブには効果が高いが、逆に肉体を持たないモブにはほとんど効果がない武器。 耐久値は151しかなく、鉄の剣の6割に相当。 刀によるダメージでトドメを刺した場合、(基本的に低確率でだが)追加ドロップが発生する事がある。 + (ネタバレに付き格納、クリックで開く) 通常のレアドロップ(刀で倒さなくても1%程度の確率で落とす)との混同に注意。 モブの種類 ダメージ 刀限定の追加ドロップ 鶏 6.0 小麦の種0-2(期待値0.3) 豚 6.0 皮0-1(期待値0.4) 羊 6.0 クモ糸0-2(期待値0.4) 雑草0-1(期待値0.25) 牛 6.0 雑草0-1(期待値0.25) キノコ牛 6.0 雑草0-1(期待値0.25) 狼 6.0 牛肉0-1(期待値0.2) 豚肉0-1(期待値0.2) 鶏肉0-1(期待値0.2) 羽根0-1(期待値0.2) 骨0-1(期待値0.2) 山猫 6.0 生魚0-2(期待値1.0) 蝙蝠 6.0 リンゴ0-1(期待値0.3) クリーパー 4.0 - ゾンビ 4.0 皮(期待値0.2) 骨(期待値0.2) ゾンビピッグマン 4.0 皮(期待値0.2) 骨(期待値0.2) ガスト 3.0 TNT1(期待値1.0) ファイアチャージ1-2(期待値1.5) エンダーマン 3.0 黄の花0-1(期待値0.2) 赤の花0-1(期待値0.2) 茶キノコ0-1(期待値0.2) 赤キノコ0-1(期待値0.2) シルバーフィッシュ 3.0 紙0-2(期待値1.0) ウィッチ 3.0 蓮の葉0-1(期待値0.5) スパイダー 3.0 - ケイブスパイダー 3.0 - イカ 3.0 - 村人 3.0 - ブレイズ 2.5 - スケルトン 1.0 - ウィザースケルトン 1.0 - スノーゴーレム 0.5 - アイアンゴーレム 0.5 - スライム 0.0 - マグマキューブ 0.0 - 温泉について ただしv2.5.9.2以降は10~20秒間、移動せずにじっと温泉に浸かっていないとポーション効果は付かなくなった。また、最低でも縦横2x2サイズ以上でないと、狭すぎてくつろげないからかポーション効果が付かなくなった。 ピストンのような見た目だが、素手でも1クリックで撤去可能。 設置した温泉ユニットを右クリックするとonになり、非常に緩慢な速度でだが徐々にお湯が湧き出し周囲に広がる。 ⇒ 上方向に対しては、温泉ユニットが設置された段を底部と見なしつつ高さ1までしかお湯は張られないが、 横方向に対しては、お湯をせき止めるための敷居が無い場合、際限なくあふれ広がっていく(8マスで止まらない) 下方向に対しても、段差があるならばそれを下りつつどんどん下へと流れ落ちていく。 広がっていく最中や、段差がある場所においては、通常の水源と同じような水流が発生するが、 この水流は見た目だけのものであり、通常の水流と違ってプレイヤーやMob、ドロップアイテムを押し流す作用は持たない。 (ボートを浮かべる事はできるが、やはりプレイヤーの入力操作でしか動かない) そのまま浸かっても、およそ4秒毎にハート0.5個分のペースで徐々に体力が回復する効果がある。 染料(全16色)を投げ込むと、投げ込んだ染料に応じてお湯に色がつく。 特定の色を一定数以上投げ込むと、透明温泉時の徐々に体力回復効果が失われる代わりに、 浸かった際に色に応じて特定のポーション効果が得られるようになる。 しかし、投げ込みすぎると毒の温泉になってしまい、浸かると毒の状態異常に冒されるようになる。 もっとも、5~6個程度の染料を投げ込んだ程度では効果は得られず、 おおよそ20~40個、染料によってはもっと大量に投げ込まないとポーション効果は発現せず、湯の色も変わらない。 また、続けて複数の温泉に入る事で簡単に複数のポーション効果を得るのを防止する措置で、 一度ポーション効果ありの温泉に入ると、1分経過しなければ他の温泉に入っても効果が得られないようになっている。 更に、バケツetc.で汲み取ると普通の水になってしまう。当然ながら色や効果も反映されない。 on状態の温泉ユニットをもう一度右クリックするとoffになり、 その温泉ユニットから溢れ出した全ての温泉水が高速で回収・撤去される。 この時に染料の投入情報もリセットされ、再度onにすると再び何の効果もない無色の温泉水が湧き出す。 温泉の色とポーション効果は次のように決まる + (ネタバレに付き格納、クリックで開く) 無色系 入浴中のみ 約4秒毎にハート0.5個分体力回復。ポーション効果ではなく別物扱い。 赤系 効果時間 4分 Strength II (攻撃力+3.0) の効果 青系 効果時間 4分 Speed II (移動速度+40%) の効果 緑系 効果時間 3分 Fire Resistance (炎・溶岩・雷無効) の効果 灰系 効果時間 1分 Regeneration II (0.5秒毎にハート0.5個分体力回復) の効果 入れ過ぎ 効果時間 1分 Poison II (0.5秒毎に0.5ダメージ) の効果 ポーション効果は固定であり、染料の投入数によって効果がパワーアップしたり、効果時間が延びたりはしない。 三原色の法則が適用されている。 赤・青・緑のどの色相の値も一定値以下 → ただの温泉 三種の色相の内、赤の値が一定以上、かつ他の二色よりも突出して高い。 → Strength II (4分間) 三種の色相の内、青の値が一定以上、かつ他の二色よりも突出して高い。 → Speed II (4分間) 三種の色相の内、緑の値が一定以上、かつ他の二色よりも突出して高い。 → Fire Resistance (3分間) 三種の色相の内、いずれか二色の値が高く、残り一色が突出して低い。 → ただの温泉 三種の色相が均等に混ざり、かつ混色の度合いが強すぎず弱すぎず → Regeneration II (1分間) 三種の色相が均等に混ざり、ただし混色が進みすぎて黒化が一定以上 → Poison II (1分間) 白(ホワイト) Bone Meal 何個投入しても温泉の色に全く影響を与えない。 黒(ブラック) Ink Sac 何個投入しても温泉の色に全く影響を与えない。 黄(イエロー) Dandelion Yellow 【1~128】ただの温泉 橙(オレンジ) Orange Dye 【1~128】ただの温泉 紫(パープル) Purple Dye 【1~128】ただの温泉 赤色(レッド) Rose Red 【1~32】ただの温泉 【33~128】攻撃 青色(ブルー) Lapis Lazuli 【1~32】ただの温泉 【33~128】加速 緑色(グリーン) Cactus Green 【1~32】ただの温泉 【33~128】耐火 桃色(ピンク) Pink Dye 【1~32】ただの温泉 【33~40】攻撃 【41~64】ただの温泉 【65~128】毒 空色(ライトブルー) Light Blue Dye 【1~32】ただの温泉 【33~40】加速 【41~64】ただの温泉 【65~128】毒 黄緑色(ライム) Lime Dye 【1~32】ただの温泉 【33~40】耐火 【41~64】ただの温泉 【65~128】毒 水色(シアン) Cyan Dye 【1~40】ただの温泉 【41~64】再生 【65~128】毒 灰色(グレー) Gray Dye 【1~40】ただの温泉 【41~64】再生 【65~128】毒 薄灰色(ライトグレー) Light Gray 【1~80】ただの温泉 【81~128】再生 赤紫色(マゼンタ) Magenta Dye 【1~20】ただの温泉 【21~32】再生 【33~128】毒 茶(ブラウン) Cocoa Beans 【1~16】ただの温泉 【17~32】攻撃 【33~128】毒
https://w.atwiki.jp/gtasa-vehicles/pages/633.html
何処にあるかは不明な配送会社。通称LSD。 ラスベンチュラス空港の周辺で、ここのロゴが入ったBensonが走っている。
https://w.atwiki.jp/akasatanahama/pages/86.html
もし宜しければ他のmodのアイテムを使ったレシピの追加方法も教えて頂けませんでしょうか? - 名無しさん 2015-06-30 19 00 52ご意見ありがとうございます。現在追加予定です。 - TomKate 2015-07-01 16 29 41先ほど、他MODのアイテム取得のチュートリアルを掲載いたしました。 - Tom Kate 2015-07-01 18 47 11 特殊な形のブロックを作る場合はどうしたらよろしいのでしょうか。可能であれば教えて下さい。 - Modding 2015-07-04 14 54 30ご意見ありがとうございます。現在追加予定です。 - Tom Kate 2015-07-05 12 21 02ありがとうございます。 - # 2015-07-05 14 39 37 追加させていただきました。 - Tom Kate 2015-07-08 21 24 38 GUIの追加方法を教えてください。 - R 2015-07-04 20 18 50ご意見ありがとうございます。今後、「上級編」にて紹介する可能性がありますので、しばらくお待ちください。 - Tom Kate 2015-07-05 12 21 57 「GUIの実装」を作成しました。遅くなってしまい申し訳ございません。 - 赤砂蛇凪浜 2015-12-18 18 40 12 骨粉などの農業系の追加法を教えていただけないでしょうか? - 名無しさん 2015-07-07 19 40 10ご意見ありがとうございます。「木・作物の追加」を追加予定です。 - 赤砂蛇凪浜 2015-07-07 20 00 09 遅くなりましたが、「木の追加」を作成しました。骨粉はIGrowableを実装すれば対応できますが、今後「植物の追加」も作成予定です。 - 赤砂蛇凪浜 2015-12-17 07 47 45 作物の追加を作成しました。 - 赤砂蛇凪浜 2017-01-24 19 49 20 この会話はコメント/トップページに移動しました。 この会話はコメント/MOD製作チュートリアル/ツール類の追加に移動しました。 「MOD製作チュートリアル」をもっと更新していただけませんか? - 名無しさん 2015-11-07 23 31 18更新が滞っていてすみません。MODの更新で手一杯な状況です。MOD更新直後などのタイミングで一気にチュートリアルの更新ができるかと思いますので、もうしばらくお待ちください。 - 赤砂蛇凪浜 2015-11-11 20 14 34 Mobの追加方法を教えてくださいますか? - 名無しさん 2015-12-06 16 11 45ご意見ありがとうございます。今年中に更新したいと思いますのでもうしばらくお待ちください。 - Tom Kate 2015-12-06 17 07 01 ここのMOD講座がわかりやすくて助かります。建材MODを作るとして、階段、半ブロック、フェンス、ゲート、壁、ガラス、ガラス板などを、16個のテクスチャーからメタデータを使って追加するチュートリアルがあると非常にありがたいです - 名無しさん 2015-12-10 21 08 49ご意見ありがとうございます。返信が遅れてしまいすみません。少なくとも階段・ハーフブロックは方向をメタデータを利用して保持しているので、一つのIDで16個追加するのは無理かと思われます。私自身が半ブロック・フェンス・ゲート・壁・ガラス板の実装をやったことがないので、BFOの製作などで技術を身につけてからになりますが、それでよろしければチュートリアルを追加します。 - 赤砂蛇凪浜 2015-12-16 13 00 59返答感謝。メタデータで方向を管理していたんですね。BFO楽しみにしてます。 - 名無しさん 2015-12-20 02 12 33 プレイヤーにダメージを与えたり燃やしたりする方法のチュートリアルを作っていただけないでしょうか。 - 新人もっだー 2016-01-17 15 38 01わかりました。今後追加します。少し遅くなるかもしれません。少々お待ちください。 - 赤砂蛇凪浜 2016-01-18 18 38 30 既存クラスの書き換えの方法を教えていただけないでしょうか。 - World_of_the_Takumi 2016-02-11 15 09 38私自身、既存クラスの書き換えをやったことがないため、チュートリアルを作成することができません。今後、もし使うことがあればその際に追加します。申し訳ございません。 - 赤砂蛇凪浜 2016-02-11 20 06 00返信ありがとうございます。自分で頑張ってみようと思います。 - World_of_the_Takumi 2016-02-12 07 43 03 実績の追加と、作物の追加を教えてくださいますか? - 88taishi88 2016-04-10 14 06 51コメントありがとうございます。現在、管理人がどちらも多忙なため、今暫くお待ちください。申し訳ありません。 - Tom Kate 2016-04-10 22 21 10返信ありがとうございます。そうですか・・・ 頑張ってください!待ってます - 88taishi88 2016-04-11 17 08 17 追加いたしました。 - Tom Kate 2016-12-11 08 15 47 作物の追加を作成しました。 - 赤砂蛇凪浜 2017-01-24 19 49 20 1.8以降のテクスチャ指定方法を解説をしていただきたいです - 名無しさん 2016-05-05 11 43 071.8以降のチュートリアルも準備中です。今しばらくお待ちください。 - Tom Kate 2016-08-14 23 20 16 TileEntintyの追加を押したら木の追加に飛ばされるんですが・・・ - 名無しさん 2016-08-14 18 37 20ご報告ありがとうございます。修正いたしました。 - Tom Kate 2016-08-14 23 20 38 新しい独自の魚を追加する方法、できれば教えてください - 名無しさん 2016-09-10 21 06 54コメントありがとうございます。私達がやったことがないため、チュートリアルの作成ができません。申し訳ありません。 - 赤砂蛇凪浜 2016-09-17 14 06 50わかりました。返信ありがとうございます。 - 名無しさん 2016-09-17 17 54 48 お久しぶりです。よろしければ、サウンドの追加などを解説してもらえますか。 - hrt1534 2016-09-20 00 35 56次のオファレンMODのバージョンアップで挑戦してみようと思っていました。成功したら作成しますので、しばらくお待ちください。誤爆のようですので一部コメントアウトしておきますね。 - 赤砂蛇凪浜 2016-09-22 11 30 15分かりました。ありがとうございます。 - hrt1534 2016-09-24 22 56 55 もしよろしければ村人の追加なども解説していただけませんか? - aaaa 2016-12-06 19 45 50追加しました。このような内容でよろしかったでしょうか? - Tom Kate 2016-12-12 22 45 31 すみません、よろしければ爆発の処理なども解説していただけないでしょうか? - PPAP 2016-12-30 00 59 39「イベントの活用」チュートリアルで解説予定です。 - Tom Kate 2016-12-30 18 08 53ありがとうございます - 名無しさん 2016-12-30 20 38 39追加しました。 - Tom Kate 2017-05-27 11 31 41 コンフィグの生成方法のチュートリアル作ってくださいませんか? - shu_hrg 2016-12-30 11 55 48今後追加したいと思います。 - Tom Kate 2016-12-30 18 09 23 作成しました。 - 赤砂蛇凪浜 2017-01-30 18 40 53 弓の追加の仕方を教えてください - 名無しさん 2017-01-22 15 36 27 アイテムの追加を参考に、追加するItemにItemBowを継承したクラスを渡して下さい。テクスチャの変更方法等もItemBowを参照すればわかると思います。また何かありましたら、ご質問下さい。 - Tom Kate 2017-01-22 20 52 29強さ(飛距離や攻撃力)を変えるにはどうすればいいでしょうか? - 名無しさん 2017-01-23 16 10 17 エンチャント追加の方法を教えてください。modding wikiのほうにもあったのですがバージョンが違うせいかインポート文の時点でエラーが出てしまいました。 - 名無しさん 2017-01-28 10 01 50 新しいエンチャントの追加です。わかりにくくてすいません。 - 名無しさん 2017-01-28 10 03 36 解決しました。 - 名無しさん 2017-02-06 18 43 08 バイオームとディメンションの追加の仕方を教えてください。 - mod初心者 2017-02-08 19 13 13 教えてくださいというか、解説してくださいですね。分かりにくくてすいません。 - mod初心者 2017-02-11 09 35 33 ご意見ありがとうございます。上級編に解説を作成予定です。 - 赤砂蛇凪浜 2017-02-11 18 44 56 ありがとうございます! - mod初心者 2017-02-11 22 58 34 新しいゲージ(体力ゲージのような)の追加のチュートリアルの追加をしてみたらどうですか? - 参考になっております。 2017-04-05 21 58 33 すみません。わかにくいですね、 □□□□□□□□□□ ♥♥♥♥♥♥♥♥♥♥ □□□□□□□□□□ こんな感じで水のゲージ(ステータス(?))を追加するチュートリアルはどうでしょうか? - 参考になっております。 2017-04-09 10 58 13 左の四角が水、右のしかくが肉です。(肉のゲージの上に水のゲージが来るようなイメージで、) - 参考になっております。 2017-04-09 11 03 45 ご意見ありがとうございます。私もTom Kate氏も挑戦したことがありませんので、チュートリアルの作成ができません。もし今後、ゲージ追加に成功した場合は、チュートリアルを作成したいと思います。 - 赤砂蛇凪浜 2017-04-09 18 53 12 ご回答ありがとうございます。そうですか…mod制作頑張ってください。 - 参考になっております。 2017-04-10 22 01 40 この会話はコメント/MOD製作チュートリアル/ツール類の追加/コメントログに移動しました。 独自のクラフトシステムと作業台を追加するにはどうすればいいのですか? - 名無しさん 2017-05-20 23 18 06 私もTom Kate氏も挑戦したことがありませんので、チュートリアルの作成ができません。もし今後、成功した場合は、チュートリアルを作成したいと思います。 - 赤砂蛇凪浜 2017-05-22 19 22 55 cliantからtileentityを同期させる方法の解説をお願いしたいです - anatawa12 2017-05-21 16 35 25 GUIを開いている時に開いているプレイヤーのみに対してであれば、ContainerクラスにあるdetectAndSendChangesなどの一連のメソッドが利用できます。また、かまどなどのように、いくつか(16種類まで)の状態を切り替えるだけであれば、メタデータを利用することができます。テクスチャへの反映などで常時、詳しいデータの同期が必要な場合は、独自にパケットを追加する必要があると思われます。チュートリアル「パケットの追加」は今後作成する予定です。 - 赤砂蛇凪浜 2017-05-22 19 30 28 moddingの時によくこのサイトを拝見させていただくのですが、私だけかもしれませんが突然文字化け?のようなことが起こり一部のチュートリアルが閲覧できませんでした。ご時間ありましたら、対処をお願いします。長文失礼しました。 - 名無しさん 2017-07-31 23 51 44 例えば、「アイテムの追加」が、以下のようになっていたりします。 - 名無しさん 2017-07-31 23 54 17 span style="color #a1a100;" import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "AluminiumMod""Aluminium Mod", version = "1.0.0"//追加するアイテムの宣言 //Itemのインスタンスを生成し、代入する。 //クリエイティブタブの登録 //システム名の登録 "aluminium") //テクスチャ名の登録 "aluminiummod aluminium"); //GameRegistryへの登録 "aluminium"); } } - 名無しさん 2017-07-31 23 54 31 よく拝見させていただきます。私も同じですー(汗 対処方お願いいたします。 - ad2y 2017-08-02 21 41 15 ご迷惑をおかけしております。@wikiのプラグインの不具合と思われます。トップページのお知らせを更新しましたので、ご覧ください。 - 赤砂蛇凪浜 2017-08-03 11 58 10 正常に表示されております。ありがとうございました。 - ad2y 2017-08-05 06 11 12 エフェクトの追加の仕方を教えてください。 - 名無しさん 2017-08-13 01 16 42 ご意見有難うございます。記事追加は赤砂蛇凪浜と話し合って何をやるか決めますので、検討いたします。 - Tom Kate 2017-08-13 23 13 27 わかりました。 - 名無しさん 2017-08-14 02 19 18 「エフェクト」とは何を指していますか?ポーション効果や、パーティクル、サウンドなどかと思いましたので、それぞれについてお伝えします。ポーション効果かサウンドでしたら、解説を作成予定です。パーティクルは私たちに技術がないため解説できません。返信いただけるとありがたいです。 - 赤砂蛇凪浜 (2017-08-18 10 32 40) ポーション効果です。 - 名無しさん (2017-08-18 18 31 50) オファレン変換機やオファレン製錬機の様な新しいレシピシステムを追加するチュートリアルを作っては頂けないでしょうか。 - 名無しさん 2017-09-16 16 15 49 できれば鉱石辞書にも対応していただけるとありがたいです。 - 名無しさん 2017-09-16 17 49 48 ご意見ありがとうございます。今後、解説を作成したいと思います。 - 赤砂蛇凪浜 2017-09-16 18 25 38 有難うございます - 名無しさん 2017-09-17 09 01 36 素材や完成品を2つ以上にすることも可能でしょうか。できるのであれば、そのチュートリアルも作って頂けないでしょうか。 - 名無しさん 2017-09-18 15 33 22 わかりました。ページを分けるかどうかは作成の際に検討したいと思います。 - 赤砂蛇凪浜 2017-09-21 16 40 47 基本事項のGradleのとこがコンパイラとなってますが、ビルドシステムのほうが正しいと思います - anatawa12 2017-10-11 21 03 11 ご指摘ありがとうございます。修正しました。 - 赤砂蛇凪浜 2017-10-12 16 31 19
https://w.atwiki.jp/mcheli/pages/22.html
Ver 0.6.0 2013/12/28 Mk.15 ファランクス CIWS 追加 Mk.15 mod.31 SeaRAM 追加 オート・メラーラ76mm砲 追加 エンブラエル EMB-314 追加 セスナ 172 追加 水上戦闘機 強風 追加 A-10 サンダーボルトⅡ 追加 Bell47G 追加 Bell47GF 追加 BAe ハリアー II(英)のテクスチャ修正 AV-8B ハリアー II(米)のテクスチャ修正 Forgeのバージョンを1.6.4最新のRecommended 1.6.4-9.11.1.965 に変更 VTOLモード時、MV-22 オスプレイのみヘリコプターのように速く移動できるように変更 ヘリコプター・戦闘機の耐久値を機体ごとに設定できるように変更 ヘリコプター・戦闘機の耐久値を下げた 弾丸のみOBJ形式のモデルの読み込みに対応 叩いてアイテム化したとき、ダメージを引き継ぐように変更(コンフィグから機能のON/OFF可) PageUp/Downで3人称視点でのカメラ距離を変更 不具合修正 プレイヤーが下りた時、機体の上に降りてしまい身動きが取れなくなるバグを修正
https://w.atwiki.jp/portal2_mod/pages/14.html
ダウンロードしたbspファイルを
https://w.atwiki.jp/factangmemo/pages/16.html
導入MOD MOD名 バージョン ○○○○ ○月○日 ○○○○(予定) ○月○日(予定)
https://w.atwiki.jp/akasatanahama/pages/106.html
概要 MOD製作チュートリアル/TileEntityの追加で追加したTileEntityにGUI(Graphical User Interface)を実装する。 動作確認済バージョン:1.7.10-10.13.4.1558 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; @Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; @Instance(MODID) public static AluminiumMod instance; public static Block chestAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { chestAluminium = new BlockAluminiumChest() .setBlockName("chestAluminium") .setBlockTextureName("aluminiummod Aluminium_Chest"); GameRegistry.registerBlock(chestAluminium, "chestAluminium"); GameRegistry.registerTileEntity(TileEntityAluminiumChest.class, "TileEntityAluminiumChest"); NetworkRegistry.INSTANCE.registerGuiHandler(this.instance, new AluminiumModGuiHandler()); } } BlockAluminiumChest.java package tutorial.aluminiummod; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class BlockAluminiumChest extends Block implements ITileEntityProvider { private Random random = new Random(); public BlockAluminiumChest() { super(Material.rock); this.setCreativeTab(CreativeTabs.tabDecorations); this.setHardness(5.0F); this.setResistance(1.0F); this.setStepSound(soundTypeMetal); isBlockContainer = true; } @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityAluminiumChest(); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { // GUIを開く。 player.openGui(AluminiumMod.instance, 1, world, x, y, z); return true; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // TileEntityの内部にあるアイテムをドロップさせる。 TileEntityAluminiumChest tileentity = (TileEntityAluminiumChest) world.getTileEntity(x, y, z); if (tileentity != null) { for (int i = 0; i tileentity.getSizeInventory(); i++) { ItemStack itemStack = tileentity.getStackInSlot(i); if (itemStack != null) { float f = random.nextFloat() * 0.6F + 0.1F; float f1 = random.nextFloat() * 0.6F + 0.1F; float f2 = random.nextFloat() * 0.6F + 0.1F; while (itemStack.stackSize 0) { int j = random.nextInt(21) + 10; if (j itemStack.stackSize) { j = itemStack.stackSize; } itemStack.stackSize -= j; EntityItem entityItem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemStack.getItem(), j, itemStack.getItemDamage())); if (itemStack.hasTagCompound()) { entityItem.getEntityItem() .setTagCompound(((NBTTagCompound) itemStack.getTagCompound().copy())); } float f3 = 0.025F; entityItem.motionX = (float) random.nextGaussian() * f3; entityItem.motionY = (float) random.nextGaussian() * f3 + 0.1F; entityItem.motionZ = (float) random.nextGaussian() * f3; world.spawnEntityInWorld(entityItem); } } } world.func_147453_f(x, y, z, block); } super.breakBlock(world, x, y, z, block, meta); } } TileEntityAluminiumChest.java package tutorial.aluminiummod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityAluminiumChest extends TileEntity implements IInventory { protected ItemStack[] itemStacks = new ItemStack[54]; @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i itemStacks.length; i++) { if (itemStacks[i] == null) continue; NBTTagCompound nbt1 = new NBTTagCompound(); nbt1.setByte("Slot", (byte) i); itemStacks[i].writeToNBT(nbt1); nbttaglist.appendTag(nbt1); } nbt.setTag("Items", nbttaglist); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList nbttaglist = nbt.getTagList("Items", 10); itemStacks = new ItemStack[54]; for (int i = 0; i nbttaglist.tagCount(); i++) { NBTTagCompound nbt1 = nbttaglist.getCompoundTagAt(i); byte b0 = nbt1.getByte("Slot"); if (0 = b0 b0 itemStacks.length) { itemStacks[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } } @Override public int getSizeInventory() { return 54; } @Override public ItemStack getStackInSlot(int slot) { return itemStacks[slot]; } @Override public ItemStack decrStackSize(int slot, int amount) { if (itemStacks[slot] == null) return null; ItemStack itemstack; if (itemStacks[slot].stackSize = amount) { itemstack = itemStacks[slot]; itemStacks[slot] = null; return itemstack; } itemstack = itemStacks[slot].splitStack(amount); if (itemStacks[slot].stackSize 1) { itemStacks[slot] = null; } return itemstack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { return null; } @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { itemStacks[slot] = itemStack; if (itemStack != null itemStack.stackSize this.getInventoryStackLimit()) { itemStack.stackSize = this.getInventoryStackLimit(); } } @Override public boolean hasCustomInventoryName() { return false; } @Override public String getInventoryName() { return "container.AluminiumMod.AluminiumChest"; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) = 64.0D; } @Override public void openInventory() {} @Override public void closeInventory() {} @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { return true; } } AluminiumModGuiHandler.java package tutorial.aluminiummod; import cpw.mods.fml.common.network.IGuiHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class AluminiumModGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntityAluminiumChest) { return new ContainerAluminiumChest(player, (TileEntityAluminiumChest) tileentity); } return null; } @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntityAluminiumChest) { return new GuiAluminiumChest(player, (TileEntityAluminiumChest) tileentity); } return null; } } ContainerAluminiumChest.java package tutorial.aluminiummod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerAluminiumChest extends Container { private TileEntityAluminiumChest tileEntity; /** アルミニウムチェストのインベントリの第一スロットの番号 */ private static final int index0 = 0; /** プレイヤーのインベントリの第一スロットの番号 */ private static final int index1 = 54; /** クイックスロットの第一スロットの番号 */ private static final int index2 = 81; /** このコンテナの全体のスロット数 */ private static final int index3 = 90; public ContainerAluminiumChest(EntityPlayer player, TileEntityAluminiumChest tileEntity) { // スロットを設定する。 this.tileEntity = tileEntity; for (int iy = 0; iy 6; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(tileEntity, ix + (iy * 9), 8 + (ix * 18), 18 + (iy * 18))); } } for (int iy = 0; iy 3; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix + (iy * 9) + 9, 8 + (ix * 18), 140 + (iy * 18))); } } for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix, 8 + (ix * 18), 198)); } } @Override public boolean canInteractWith(EntityPlayer player) { return tileEntity.isUseableByPlayer(player); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) { ItemStack itemStack = null; Slot slot = (Slot) inventorySlots.get(slotNumber); if (slot != null slot.getHasStack()) { ItemStack itemStack1 = slot.getStack(); itemStack = itemStack1.copy(); if (index0 = slotNumber slotNumber index1) { // アルミニウムチェストのインベントリならプレイヤーのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index1, index3, true)) { return null; } } else { // プレイヤーのインベントリならアルミニウムチェストのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index0, index1, false)) { return null; } } if (itemStack1.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); } if (itemStack1.stackSize == itemStack.stackSize) { return null; } slot.onPickupFromSlot(player, itemStack1); } return itemStack; } } GuiAluminiumChest.java package tutorial.aluminiummod; import org.lwjgl.opengl.GL11; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; public class GuiAluminiumChest extends GuiContainer { private TileEntityAluminiumChest tileEntity; // GUIのテクスチャの場所を指定する。今回はバニラのラージチェストと同じものを使う。 private static final ResourceLocation GUITEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); public GuiAluminiumChest(EntityPlayer player, TileEntityAluminiumChest tileEnttiy) { super(new ContainerAluminiumChest(player, tileEnttiy)); this.tileEntity = tileEnttiy; ySize = 222; } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { fontRendererObj.drawString(StatCollector.translateToLocal(tileEntity.getInventoryName()), 8, 6, 4210752); fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float tick, int mouseX, int mouseY) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(GUITEXTURE); int k = (width - xSize) / 2; int l = (height - ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, xSize, ySize); } } 解説 Instance String modid コアクラスのインスタンスにつけるアノテーション。 登録やインスタンスの生成・代入はForge側がやってくれるので何もしなくてよい。 NetworkRegistry GUIやパケットなどを管理するenum。 void registerGuiHandler(Object mod, IGuiHandler handler) MODのコアクラスのインスタンスと、それに対応したGuiHandlerを登録する処理。 EntityPlayer プレイヤーのEntity継承クラス。 void openGui(Object mod, int modGuiId, World world, int x, int y, int z) 第一引数はコアクラスのインスタンス、第二引数はMOD内でのGUIのID。 プレイヤーにGUIを開かせる。 IGuiHandler GuiHandlerのためのインターフェース。 Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) サーバー側で呼ばれる。 基本的にはIDに対応したContainerを返す。 Worldのインスタンスと座標も引数に含まれているので、TileEntityを取得して判別してもよい。 Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) クライアント側で呼ばれる。 基本的にはIDに対応したGuiを返す。 Container Slot addSlotToContainer(Slot slot) 新たなSlotをコンテナに登録する処理。 boolean canInteractWith(EntityPlayer player) プレイヤーがコンテナを使えるかどうかの判定。 ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) スロットがShift+クリックされた時の処理。 クリックされたスロットの中身を移動する。 boolean mergeItemStack(ItemStack itemStack, int beginIndex, int endIndex, boolean doReverse) 引数のItemStackを指定された範囲内の空のスロットに移動する。 範囲は、beginIndexを含み、endIndexは含まない。 doReverseがtrueの場合は、検索方向がend→beginになる。 GuiContainer コンテナを持つGUIのクラス。 クライアントのみで使用される。 public GuiContainer(Container container) 引数は対応するコンテナ。 void drawGuiContainerForegroundLayer(int mouseX, int mouseY) Guiの前面レイヤーを描画する処理。 文字の描画などをする。 void drawGuiContainerBackgroundLayer(float tick, int mouseX, int mouseY) Guiの背景レイヤーを描画する処理。 Guiのテクスチャの描画などをする。 ResourceLocation リソースの場所を保持するクラス。 public ResourceLocation(String path) コンストラクタ。 引数でリソースの場所を指定する。 "modid textures/..."というように、すべて小文字にしたMODIDと、textures以下のファイルのパスを指定する。 例えば、assets/aluminiummod/textures/gui/gui.pngだとすると、private static final ResourceLocation GUITEXTURE = new ResourceLocation("aluminiummod textures/gui/gui.png");と記述する。 なお、GUIのテクスチャは画像ファイルを正方形にしないと縦横比がおかしくなる可能性があるので、カンバスサイズを256x256や512x512などにしておいて、余白を透明で残しておくと良い。 使用例 オファレンプレゼントボックスを追加している部分。 +オファレンMOD OfalenModCore.java package nahama.ofalenmod; /*略*/ /** * @author Akasata Nahama */ @Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION) public class OfalenModCore { public static final String MODID = "OfalenMod"; public static final String MODNAME = "Ofalen Mod"; public static final String MCVERSION = "1.7.10"; public static final String OMVERSION = "1.1.0"; public static final String VERSION = "[" + MCVERSION + "]" + OMVERSION; /** coreクラスのインスタンス */ @Instance(MODID) public static OfalenModCore instance; /*略*/ /** 初期化前処理。 */ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ OfalenModBlockCore.registerBlock(); // 機械類のGUIを登録する。 NetworkRegistry.INSTANCE.registerGuiHandler(this.instance, new OfalenModGuiHandler()); /*略*/ } /*略*/ } OfalenModBlockCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModBlockCore { /*略*/ public static Block boxPresentOfalen; /** ブロックを登録する処理。 */ public static void registerBlock() { /*略*/ boxPresentOfalen = new BlockPresentBox() .setBlockName("boxPresentOfalen") .setBlockTextureName("ofalenmod present_box"); GameRegistry.registerBlock(boxPresentOfalen, "boxPresentOfalen"); GameRegistry.registerTileEntity(TileEntityPresentBox.class, "TileEntityOfalenPresentBox"); } } BlockPresentBox.java package nahama.ofalenmod.block; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import nahama.ofalenmod.OfalenModCore; import nahama.ofalenmod.handler.OfalenModAnniversaryHandler; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.World; public class BlockPresentBox extends Block implements ITileEntityProvider { private Random random = new Random(); /** 0 下,1 上,2 横,3 クリスマス下,4;クリスマス上,5 クリスマス横 */ private IIcon[] iicon = new IIcon[6]; public BlockPresentBox() { super(Material.sponge); this.setCreativeTab(OfalenModCore.tabOfalen); this.setHardness(1.0F); this.setResistance(1.0F); this.setStepSound(Block.soundTypeCloth); } @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPresentBox(); } /** プレイヤーに右クリックされたときの処理。 */ @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { // GUIを開く player.openGui(OfalenModCore.instance, 1, world, x, y, z); return true; } /** ブロックが破壊された時の処理。 */ @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // TileEntityの内部にあるアイテムをドロップさせる。 TileEntityPresentBox tileentity = (TileEntityPresentBox) world.getTileEntity(x, y, z); if (tileentity != null) { for (int i = 0; i tileentity.getSizeInventory(); i++) { ItemStack itemStack = tileentity.getStackInSlot(i); if (itemStack != null) { float f = random.nextFloat() * 0.6F + 0.1F; float f1 = random.nextFloat() * 0.6F + 0.1F; float f2 = random.nextFloat() * 0.6F + 0.1F; while (itemStack.stackSize 0) { int j = random.nextInt(21) + 10; if (j itemStack.stackSize) { j = itemStack.stackSize; } itemStack.stackSize -= j; EntityItem entityItem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemStack.getItem(), j, itemStack.getItemDamage())); if (itemStack.hasTagCompound()) { entityItem.getEntityItem().setTagCompound(((NBTTagCompound) itemStack.getTagCompound().copy())); } float f3 = 0.025F; entityItem.motionX = (float) random.nextGaussian() * f3; entityItem.motionY = (float) random.nextGaussian() * f3 + 0.1F; entityItem.motionZ = (float) random.nextGaussian() * f3; world.spawnEntityInWorld(entityItem); } } } world.func_147453_f(x, y, z, block); } super.breakBlock(world, x, y, z, block, meta); } /** ブロックのアイコンを登録する処理。 */ @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { for (int i = 0; i 6; i++) { iicon[i] = register.registerIcon(this.getTextureName() + "-" + i); } } /** ブロックのアイコンを返す。 */ @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { int i = 2; if (side == 0) i = 0; if (side == 1) i = 1; if (OfalenModAnniversaryHandler.isChristmas) i += 3; return iicon[i]; } } TileEntityPresentBox.java package nahama.ofalenmod.tileentity; import nahama.ofalenmod.handler.OfalenModAnniversaryHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityPresentBox extends TileEntity implements IInventory { protected ItemStack[] itemStacks = new ItemStack[54]; protected String owner; /** プレイヤーがインベントリを開けた時の処理。 */ public void openInventory(EntityPlayer player) { if (owner != null || worldObj.isRemote) return; // オーナーに設定し、中身を上書きする。 owner = player.getCommandSenderName(); ItemStack[] presents = OfalenModAnniversaryHandler.getPresents(player); if (presents == null) return; itemStacks = presents; } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i itemStacks.length; i++) { if (itemStacks[i] == null) continue; NBTTagCompound nbt1 = new NBTTagCompound(); nbt1.setByte("Slot", (byte) i); itemStacks[i].writeToNBT(nbt1); nbttaglist.appendTag(nbt1); } nbt.setTag("Items", nbttaglist); nbt.setString("Owner", owner); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList nbttaglist = nbt.getTagList("Items", 10); itemStacks = new ItemStack[54]; for (int i = 0; i nbttaglist.tagCount(); i++) { NBTTagCompound nbt1 = nbttaglist.getCompoundTagAt(i); byte b0 = nbt1.getByte("Slot"); if (0 = b0 b0 itemStacks.length) { itemStacks[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } owner = nbt.getString("Owner"); } /** インベントリのスロット数を返す。 */ @Override public int getSizeInventory() { return 54; } /** スロットのアイテムを返す。 */ @Override public ItemStack getStackInSlot(int slot) { return itemStacks[slot]; } /** スロットのスタック数を減らす。 */ @Override public ItemStack decrStackSize(int slot, int amount) { if (itemStacks[slot] == null) return null; ItemStack itemstack; if (itemStacks[slot].stackSize = amount) { itemstack = itemStacks[slot]; itemStacks[slot] = null; return itemstack; } itemstack = itemStacks[slot].splitStack(amount); if (itemStacks[slot].stackSize 1) { itemStacks[slot] = null; } return itemstack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { return null; } /** スロットの中身を設定する。 */ @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { itemStacks[slot] = itemStack; if (itemStack != null itemStack.stackSize this.getInventoryStackLimit()) { itemStack.stackSize = this.getInventoryStackLimit(); } } /** 金床で設定された名前を持つかどうか。 */ @Override public boolean hasCustomInventoryName() { return false; } /** インベントリの名前を返す。 */ @Override public String getInventoryName() { return "container.OfalenMod.PresentBox"; } /** このインベントリの最大スタック数を返す。 */ @Override public int getInventoryStackLimit() { return 64; } /** プレイヤーが使用できるかどうか。 */ @Override public boolean isUseableByPlayer(EntityPlayer player) { if (owner != null !player.getCommandSenderName().equals(owner)) return false; return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) = 64.0D; } @Override public void openInventory() {} @Override public void closeInventory() {} /** スロットにアクセスできるかどうか。 */ @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { return false; } } OfalenModGuiHandler.java package nahama.ofalenmod.handler; /*略*/ public class OfalenModGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (id == 2) return new ContainerItemShield(player); if (id == 3) return new ContainerItemTeleporter(player); if (id == 4) return new ContainerItemFloater(player); if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntitySmeltingMachine) { return new ContainerSmeltingMachine(player, (TileEntitySmeltingMachine) tileentity); } if (tileentity instanceof TileEntityRepairMachine) { return new ContainerRepairMachine(player, (TileEntityRepairMachine) tileentity); } if (tileentity instanceof TileEntityConversionMachine) { return new ContainerConversionMachine(player, (TileEntityConversionMachine) tileentity); } if (tileentity instanceof TileEntityTeleportMarker) { return new ContainerTeleportMarker(player, (TileEntityTeleportMarker) tileentity); } if (tileentity instanceof TileEntityPresentBox) { return new ContainerPresentBox(player, (TileEntityPresentBox) tileentity); } return null; } @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (id == 2) return new GuiItemShield(player); if (id == 3) return new GuiItemTeleporter(player); if (id == 4) return new GuiItemFloater(player); if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntitySmeltingMachine) { return new GuiSmeltingMachine(player, (TileEntitySmeltingMachine) tileentity); } if (tileentity instanceof TileEntityRepairMachine) { return new GuiRepairMachine(player, (TileEntityRepairMachine) tileentity); } if (tileentity instanceof TileEntityConversionMachine) { return new GuiConversionMachine(player, (TileEntityConversionMachine) tileentity); } if (tileentity instanceof TileEntityTeleportMarker) { return new GuiTeleportMarker(player, (TileEntityTeleportMarker) tileentity); } if (tileentity instanceof TileEntityPresentBox) { return new GuiPresentBox(player, (TileEntityPresentBox) tileentity); } return null; } } ContainerPresentBox.java package nahama.ofalenmod.inventory; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerPresentBox extends Container { private TileEntityPresentBox tileEntity; /** プレゼントボックスのインベントリの第一スロットの番号 */ private static final int index0 = 0; /** プレイヤーのインベントリの第一スロットの番号 */ private static final int index1 = 54; /** クイックスロットの第一スロットの番号 */ private static final int index2 = 81; /** このコンテナの全体のスロット数 */ private static final int index3 = 90; public ContainerPresentBox(EntityPlayer player, TileEntityPresentBox tileEntity) { this.tileEntity = tileEntity; tileEntity.openInventory(player); for (int iy = 0; iy 6; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(tileEntity, ix + (iy * 9), 8 + (ix * 18), 18 + (iy * 18))); } } for (int iy = 0; iy 3; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix + (iy * 9) + 9, 8 + (ix * 18), 140 + (iy * 18))); } } for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix, 8 + (ix * 18), 198)); } } @Override public boolean canInteractWith(EntityPlayer player) { return tileEntity.isUseableByPlayer(player); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) { ItemStack itemStack = null; Slot slot = (Slot) inventorySlots.get(slotNumber); if (slot != null slot.getHasStack()) { ItemStack itemStack1 = slot.getStack(); itemStack = itemStack1.copy(); if (index0 = slotNumber slotNumber index1) { // プレゼントボックスのインベントリならプレイヤーのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index1, index3, true)) { return null; } } else { if (index1 = slotNumber slotNumber index2) { // プレイヤーのインベントリならクイックスロットに移動。 if (!this.mergeItemStack(itemStack1, index2, index3, false)) { return null; } } else if (index2 = slotNumber slotNumber index3 !this.mergeItemStack(itemStack1, index1, index2, false)) { // クイックスロットからプレイヤーのインベントリに移動できなかったら終了。 return null; } } if (itemStack1.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); } if (itemStack1.stackSize == itemStack.stackSize) { return null; } slot.onPickupFromSlot(player, itemStack1); } return itemStack; } } GuiPresentBox.java package nahama.ofalenmod.gui; import org.lwjgl.opengl.GL11; import nahama.ofalenmod.inventory.ContainerPresentBox; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; public class GuiPresentBox extends GuiContainer { private TileEntityPresentBox tileEntity; private static final ResourceLocation GUITEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); public GuiPresentBox(EntityPlayer player, TileEntityPresentBox tileEnttiy) { super(new ContainerPresentBox(player, tileEnttiy)); this.tileEntity = tileEnttiy; ySize = 222; } @Override protected void drawGuiContainerForegroundLayer(int par1, int par2) { fontRendererObj.drawString(StatCollector.translateToLocal(tileEntity.getInventoryName()), 8, 6, 4210752); fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(GUITEXTURE); int k = (width - xSize) / 2; int l = (height - ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, xSize, ySize); } } コメント この項目に関する質問などをどうぞ。 GUIのテクスチャをオリジナルのものにする場合どう記述すれば、よいのでしょうか? - 新人もっだー 2015-12-20 12 20 13 解説/public ResourceLocation(String path)に追記しましたのでご確認ください。自分で指定したパスにバニラのラージチェストのテクスチャを改変したものを保存すればできます。 - Tom Kate 2015-12-21 16 52 24 コピペでもコンストラクター ContainerAluminiumChest(EntityPlayer, TileEntityChest) は未定義ですとなります。 - 新人もっだー 2015-12-26 11 26 55 それは、Eclipse上でコンパイルエラーの検出がされたということでしょうか?どの行でのエラーかを教えていただけないでしょうか。 - 赤砂蛇凪浜 2015-12-26 13 48 01 ContainerAluminiumChestのreturn new ContainerChest(player, (TileEntityChest) tileentity);no - 新人もっだー 2015-12-28 08 51 55 の行です - 新人もっだー 2015-12-28 08 52 37 このチュートリアルの中に該当する行がありません。一度コピー ペーストしなおしてみてください。 - 赤砂蛇凪浜 2015-12-28 09 36 26 import cpw.mods.fml.common.Mod.Instance;が書き込んでから保存するとなぜかそれだけ消えてしまうのですが、なんで何でしょうか? - san 2016-09-11 08 20 49 IDE(Eclipse)のimport文自動編集が消しているのだと思われます。@Instanceの部分にエラーが出ていなければ特に問題はないと思います。 - 赤砂蛇凪浜 2016-09-16 07 35 27 醸造台やエンチャント台、装備スロットのように、スロット内に一部のアイテムのみ入れられるようにするにはどうすれば良いのでしょうか? - 名無しさん 2016-12-02 01 33 32 addSlotToContainerでSlotを継承した自作のクラスを渡せばよいです。その際、isItemValidをオーバーライドすれば入れられるアイテムを、canTakeStackをオーバーライドすれば取り出せるアイテムを制御できます。分かりにくかったらすみません。後ほど本文への掲載も検討します。 - 赤砂蛇凪浜 2016-12-04 10 50 12 GUIに文字を入れて翻訳するのはどうやるんですか - HIROMARU (2021-01-09 11 38 30) 名前
https://w.atwiki.jp/minecraftserverk/pages/16.html
MODについて まだこのサーバーにMODは導入されていません 現バージョンに対応次第MODを導入する予定です このサーバーでは以下のMODを導入する予定です ModLoader ModLoaderMP minecraftforge Industrial Craft2 Build Craft(追加アドオンにてadditionalpipes も導入予定) RedPower Forestry for Minecraft PowerConverters 各MODの詳細については本家wikiを参照してください。
https://w.atwiki.jp/hidamari_minecraft/pages/26.html
MOD情報 ひだまり鯖は、方針としてほぼバニラ状態(MOD無し)で運営しています。 ですが、より便利な機能を提供してくれるソフトを紹介します。 MCJPISS2 日本語MOD無しでも、日本語入力を支援してくれる外部ソフトです。 MODではないので、いち早く、新バージョンへ対応できます。 ハルの総合コマンドエディタ ワープブロックで使用している「コマンドブロック」 の使い方を広げられないか、このエディタを使って試してみよう? というところです。 導入予定MOD できるだけバニラに近い状態で運営しているサーバーですが、一部MODの導入を検討しています。 以下そのメモです。 日本語MOD 木こりMOD
https://w.atwiki.jp/thesimssocial/pages/128.html
名称 Andre Andre Dummy 費用 Lv 35 SimCash 設置材料 ? Drop ? SimCash及び期限付きのため不明